AutoyaでのappVersion/resVersionの変化と挙動について


概要

Autoyaでは、主に2つのバージョン値を使ってユーザーの手元のゲームを管理できるようになっている。


特にresVersionがこれ超かっこいい機構なので解説する。

まだ上書きの予約の実装みたいなのが終わってないんだけど。



よくあるアプリケーションの運用概念

・最新版を配布しだしたのでユーザーに最新Appを取得してほしい

・DLリソースを追加したのでDLのための事前情報をAppに与えて最新リソースをDLさせたい

など。このへんはまあ最低限。



最新版を配布しだしたのでユーザーに最新Appを取得してほしい

Autoyaでは、appVersionというパラメータを使ってこれを実現できる。


・Assets/Autoya/Settings/AutoyaBuildManifestObject.csのappVerionにアプリケーションバージョン値を入れる

・AutoyaのHttpモジュールを経由した通信では、requestHeaderにappversion=“1.0.0”のようなパラメータが入る。

・サーバ側でその値を確認し、アップデートしてほしいバージョンだった場合、responseHeaderにappversion=“1.0.1”などと返すと、

クライアント側はその要求を受け、OverridePoints.cs/OnNewAppRequested メソッドが着火される。


このメソッド内で「新しいAppがあるのでDLしてね!」って書いたりするといいと思う。



要は、次の3ポイントでアプリケーション更新が実装できる。


1. AutoyaBuildManifestObject.csにいい感じのappVersionを書く

2.サーバ側から適当なタイミングでresponseHeaderにappversion=”X.Y.Z”とかを返す

3. OverridePoints.cs/OnNewAppRequested メソッドにアプリケーション更新UIを出したり、ストアに遷移するコードを書く



DLリソースを追加したのでDLのための事前情報をAppに与えて最新リソースをDLさせたい

Autoyaでは、resVersionというパラメータとAssetBundle関連の機構でこれらを実現している。


・Assets/Autoya/Settings/AutoyaRuntimeManifestObject.csのresVerionにリソースバージョン値を入れる

・AutoyaのHttpモジュールを経由した通信では、requestHeaderにresversion=“1.0.0”のようなパラメータが入る。

・サーバ側でその値を確認し、アップデートしてほしいバージョンだった場合、responseHeaderにresversion=“1.0.1”などと返すと、 クライアント側はその要求を受け、OverridePoints.cs/OnRequestNewAssetBundleList メソッドが着火される。

このメソッドには、今すぐ最新リソースリストをDLするか否か、YesかNoで返すことができる。

Yesと答えるとバックグラウンドで新しいリソースリストのDLが開始される。

Noと答えるとリクエストは発生しない。


バトル中など、リストが更新されても特に影響のない、横槍を受けたくない箇所ではNoを返すといいと思う。

ちなみにYesを返してもNoを返してもゲーム側に何かデータ処理を要求することはない。

使用しているAssetBundleにも影響はない。


・Yesと答えて新しいリソースリストのDLが完了すると、OverridePoints.cs /ShouldUpdateToNewAssetBundleList メソッドが着火される。

このメソッドには、DLが完了したリソースリストを今すぐ適応するか否か、true/falseで返すことができる。


trueを返すと、リソースリストが更新される。現在使っているAssetは次回ロード時に自動的に最新のものを取得してくるようになる。

falseを返すと、リストの更新は延期される。新リストのデータはメモリ上にキャッシュされているため、次回以降のDLは発生しない。


ちなみにtrueを返してもfalseを返してもゲーム側に何かデータ処理を要求することはない。

使用しているAssetBundleにも影響はない。


・リスト更新後、AutoyaのHttpモジュールを経由した通信では、requestHeaderにresversion=“1.0.1”など、更新後のパラメータが入る。

・これ以降、ゲーム中でロードされる素材が自動的に最新のリストに記載されているものになる。

端末内に最新データが存在しない場合、使用するタイミングでダウンロードが発生するので、

そういった形式になるのが困る場合はPrelaod機構を使うことをお勧めする。

(preload機構は事前DLさせるリソースをサーバ側で変更できる。)



要は、次の4ポイントでアプリケーション更新が実装できる。


1.Assets/Autoya/Settings/AutoyaRuntimeManifestObject.csのresVerionにリソースバージョン値を入れる

2.サーバから適当なタイミングでresponseHeaderにresversion=“X.Y.Z”とかを返す

3.OverridePoints.cs/OnRequestNewAssetBundleList メソッドでYesかNoを返す

4.OverridePoints.cs /ShouldUpdateToNewAssetBundleList メソッドでtrueかfalseを返す